package com.dadao.mall.lambdademo;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

/**
 * 学习lambda表达式中 predicate接口的使用方法
 * Predicate接口中定义了一个需要实现的方法test(T t)方法，
 * 还有JDK8特有的几个已经实现了的默认方法，打开Predicate里有一个注解，
 * @FunctionalInterface，
 * 代表这个接口只能拥有一个未实现的方法，是一个函数接口
 *
 * 应用场景：
 * JDK8引入Predicate接口以后，
 * 我们就可以把经常改变需求的if里面的判断语句进行封装，变成Predicate接口，
 */
public class PredicateLearn {

    public static void main(String[] args){
        List<Cat> catList = new ArrayList();
        for (int i=1;i<30;i++){
            Cat p = new Cat(i%2==1,i+5);
            catList.add(p);
        }
        System.out.println("性别为：男---------------------------------");
        //筛选出性别为男的
        List<Cat> cats = PredicateLearn.filter(catList,p->p.sex);
        cats.forEach(c->System.out.println(c.toString()));
        System.out.println("年龄大于20----------------------------------------------");
        //筛选出年龄大于20
        List<Cat> cats2 = PredicateLearn.filter(catList,p->p.age>20);
        cats2.forEach(c->System.out.println(c.toString()));

    }


    /**
     * 根据fun条件过滤入参peopleList 中的人员
     * @param peopleList
     * @param fun
     * @return
     */
    public static List<Cat> filter(List<Cat> peopleList, Predicate<Cat> fun){
        List<Cat> result = new ArrayList<>();
        for(Cat p : peopleList){
            if(fun.test(p)){
                result.add(p);
            }
        }
        return result;
    }

}
